package ar.republicagroup.gestion.services;

import ar.republicagroup.gestion.entities.Banco;
import ar.republicagroup.gestion.entities.Cheque;
import ar.republicagroup.gestion.entities.ChequeEstado;
import ar.republicagroup.gestion.entities.ChequeTipo;
import ar.republicagroup.gestion.entities.Cliente;
import ar.republicagroup.gestion.entities.CuentaBanco;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.swing.table.DefaultTableModel;

public interface ChequeServices {
    
        public static final int TAMANO_CODIGO_CHEQUE    = 29;
        public static final String ORIGEN_CAP_BSAS      = "CAP";
        public static final String ORIGEN_VC    = "VC";
            
        public List<Cheque> findEntities();
	
	public String insert(Cheque beanCheque);

        public String update(Cheque beanCheque);

        public Cheque get(Integer id_cheque); 
        
        public List<Cheque> getChequesByNumeroDeCheque(String numeroDeCheque);
        
        public List<Cheque> getChequesByImporte(double importe);
        
        public List<Cheque> getChequesByBolsaId(int bolsa_id);
        
        public List<Cheque> getChequesByFilters(ChequeTipo chequeTipo,ChequeEstado chequeEstado,CuentaBanco cuentaBanco,Banco banco,String origen,Calendar fechaDesde,Calendar fechaHasta);
       
        public boolean isChequeRegistered(String codigoStringDeCheque);
        
        public Map<String,String> getChequeDataFromStringCode(String codigoChequeString);
        
        public Map<String,Object> getTotalesProvCap(); 
        
        public Map<String,Object> getLiquidacionesPosiblesPorCadaCliente(Calendar fechaLiquidacion);
        
        public String delete(Integer id_cheque);
        
        public boolean isChequeUpdatedToday(Cheque cheque);
        
        public List<Object[]> getSumaDeChequesPorClienteDelDia(String fecha,String origenCheques);
        
        /* Business Logic */
        
       /**
        * Elimina todas las letras que puedan existir en el código de cheque ingresado
        * @param codigoDeCheque , el código de cheque completo
        * @return codigoDeCheque sin letras. 
        */ 
       public String limpiarCodigoDeCheque(String codigoDeCheque);
        
       public List<Cheque> cambiarEstadosDeCheques(DefaultTableModel table,int[] selectedCheques,ChequeEstado nuevoEstado); 

       
       /**
        * Descompone el código de cheque y valida que los datos estén correctos , 
        * si todo es correcto devuelve un objeto de tipo Cheque sino devuelve null 
        * @param codigoDeCheque
        * @return Cheque
        */
       public Cheque validarCodigoDeCheque(String codigoDeCheque);
       
       /**
        * Cambia la comisión y la fecha de alta a una lista de cheques
        * @param chequeList , el List de Cheque al que se le va cambiar el cliente
        * @param cliente, el cliente del cual se van a obtener las comisiones VC y CAP a la lista de Cheque
        * @param nuevaFechaAlta , la nueva fecha de alta que se le va a signar a la lista de Cheque
        * @return List<Cheque> , el listado actualizado de Cheque
        */
       public List<Cheque> cambiarDeFechaAltaAndComision(List<Cheque> chequeList,Cliente nuevoCliente,Date nuevaFechaAlta);
   
       public List<Integer> obtenerIdsFromChequeList(List<Cheque> chequeList);
       
       
}
